home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_138 / modulatools / modulatools.source / texttools.mod < prev    next >
Text File  |  1992-05-06  |  8KB  |  174 lines

  1. (******************************************************************************)
  2. (*                                                                            *)
  3. (*  Version 1.00a.002 (Beta) :   March 2, 1988                                *)
  4. (*                                                                            *)
  5. (*    These procedures were originally written under version 1.20 of the TDI  *)
  6. (* Modula-2 compiler. I have rewritten this module to operate under the v2.00 *)
  7. (* compiler. However, should you find any problem or inconsistency with the   *)
  8. (* functionality of this code, please contact me at the following address:    *)
  9. (*                                                                            *)
  10. (*                               Jerry Mack                                   *)
  11. (*                               23 Prospect Hill Ave.                        *)
  12. (*                               Waltham, MA   02154                          *)
  13. (*                                                                            *)
  14. (*    Check the module MenuUtils for TDI's (considerably less powerful) ver-  *)
  15. (* sions of my Menu and IntuitionText procedures. The modules GadgetUtils and *)
  16. (* EasyGadgets should also be of great help.                                  *)
  17. (*                                                                            *)
  18. (******************************************************************************)
  19. (*                                                                            *)
  20. (*    The source code to TextTools is in the public domain. You may do with   *)
  21. (* it as you please.                                                          *)
  22. (*                                                                            *)
  23. (******************************************************************************)
  24.  
  25. IMPLEMENTATION MODULE TextTools;
  26.  
  27.  
  28. FROM GraphicsLibrary IMPORT DrawingModes, DrawingModeSet;
  29. FROM Intuition       IMPORT IntuitionText, IntuitionTextPtr;
  30. FROM Storage         IMPORT ALLOCATE, DEALLOCATE;
  31. FROM Strings         IMPORT InitStringModule, String;
  32. FROM SYSTEM          IMPORT ADDRESS, BYTE, NULL;
  33.  
  34. TYPE
  35.    StringPtr = POINTER TO String;
  36.  
  37.  
  38.    PROCEDURE Min (int1, int2 : INTEGER ) : INTEGER;
  39.    
  40.    BEGIN
  41.       IF (int1 < int2) THEN              (* utility routine to find the    *)
  42.          RETURN int1;                    (* minimum of a pair of integers; *)
  43.       ELSE
  44.          RETURN int2;
  45.       END; (* IF int1 *)
  46.    END Min; 
  47.    
  48.    
  49.    PROCEDURE Max (int1, int2 : INTEGER ) : INTEGER;
  50.    
  51.    BEGIN
  52.       IF (int1 > int2) THEN              (* utility routine to find the    *)
  53.          RETURN int1;                    (* maximum of a pair of integers; *)
  54.       ELSE
  55.          RETURN int2;
  56.       END; (* IF int1 *)
  57.    END Max; 
  58.    
  59.  
  60. (***************************************************************************)
  61. (*                                                                         *)
  62. (*    This procedure creates an IntuitionText structure from a supplied    *)
  63. (* character string. The location (or offset, if for Menus & gadgets) must *)
  64. (* must also be supplied. The user has access to each of the fields of the *)
  65. (* IntuitionText structure via the corresponding variables listed in the   *)
  66. (* definition module. Or, she/he may ignore the variables, since they all  *)
  67. (* have default values).                                                   *)
  68. (*                                                                         *)
  69. (*    The following parameters are required as inputs:                     *)
  70. (*                                                                         *)
  71. (*    TextItem - (String) the character string containing the desired text *)
  72. (*    TextLeft - (INTEGER) the leftmost pixel-location of the text         *)
  73. (*    TextTop  - (INTEGER) the topmost  pixel-location of the text         *)
  74. (*                                                                         *)
  75. (*    Upon return to the calling routine, the variable IntuiText will      *)
  76. (* point to the need IntuitionText structure.                              *)
  77. (*                                                                         *)
  78. (***************************************************************************)
  79.  
  80.    PROCEDURE GetIntuiText  (TextItem          : String;
  81.                             TextLeft, TextTop : INTEGER;
  82.                             VAR IntuiText     : IntuitionTextPtr);
  83.    
  84.    VAR
  85.       TextString : StringPtr;
  86.       
  87.    BEGIN
  88.       NEW(IntuiText);
  89.       NEW(TextString);
  90.       TextString^ := TextItem;
  91.       WITH IntuiText^ DO 
  92.          FrontPen  := BYTE(FrontTextPen);         (* pens chosen from the  *)
  93.          BackPen   := BYTE(BackTextPen);          (* Screen's color table; *)
  94.          DrawMode  := BYTE(TextDrawMode);
  95.          LeftEdge  := TextLeft;
  96.          TopEdge   := TextTop;
  97.          ITextFont := ADDRESS(CurrentFont);
  98.          IText     := TextString;
  99.          NextText  := NULL;                  
  100.       END; (* WITH IntuiText *)
  101.       
  102.       IF (LastText <> NULL) THEN
  103.          LastText^.NextText := IntuiText;
  104.          LastText := NULL;
  105.       END; (* IF LastText *)
  106.       
  107.    END GetIntuiText;
  108.  
  109.  
  110. (***************************************************************************)
  111. (*                                                                         *)
  112. (*    This procedure DISPOSEs of an IntuitionText structure without leav-  *)
  113. (* ing dangling pointers. All of the pointers are DISPOSEd of, followed by *)
  114. (* the IntuitionText itself.                                               *)
  115. (*    The only parameter required is the variable IntuiText, which points  *)
  116. (* to the IntuitionText structure to be DISPOSEd.                          *)
  117. (*                                                                         *)
  118. (***************************************************************************)
  119.  
  120.    PROCEDURE DestroyIntuiText (VAR IntuiText  : IntuitionTextPtr;
  121.                                DestroyAllText : BOOLEAN);
  122.  
  123.    VAR
  124.       NextIntuiText : IntuitionTextPtr;
  125.       dummystring   : StringPtr;
  126.  
  127.  
  128.       PROCEDURE DisposeOfIntuiText;
  129.  
  130.       BEGIN
  131.          WITH IntuiText^ DO
  132.             NextIntuiText := NextText;
  133.             IF (IText <> NULL) THEN          (* ok to DISPOSE of NIL pointer; *)
  134.                dummystring := StringPtr(IText);
  135.                DISPOSE (dummystring);
  136.             END;
  137.          END; (* WITH IntuiText^ *)
  138.  
  139.          DISPOSE (IntuiText);
  140.          IntuiText := NextIntuiText;
  141.  
  142.          IF (IntuiText = NIL) THEN IntuiText := NULL; END;
  143.  
  144.       END DisposeOfIntuiText;
  145.  
  146.       
  147.    BEGIN
  148.  
  149.       IF (IntuiText = NIL)  THEN IntuiText := NULL; END;
  150.       IF (IntuiText = NULL) THEN RETURN END;
  151.  
  152.       IF (DestroyAllText) THEN
  153.          REPEAT                            (* destroy given text and any text *)
  154.             DisposeOfIntuiText;            (* which may be linked to it;      *)
  155.          UNTIL (IntuiText = NULL);
  156.       ELSE
  157.          DisposeOfIntuiText;               (* destroy only given text & return*)
  158.       END; (* IF DestroyAllText *)         (* next text in linked list;       *)
  159.    END DestroyIntuiText;   
  160.  
  161.  
  162. BEGIN
  163.  
  164.    InitStringModule;                          (* initialize Strings module *)
  165.  
  166.                   (* initialize variables used in IntuitionText procedures *)
  167.    FrontTextPen := 0;
  168.    BackTextPen  := 1;
  169.    CurrentFont  := NULL;
  170.    TextDrawMode := DrawingModeSet{Jam2};
  171.    LastText     := NULL;
  172.                                  
  173. END TextTools.
  174.